gl renderer: Sync gpu and cpu default alpha value
authorTimm Bäder <mail@baedert.org>
Wed, 24 Apr 2019 10:56:44 +0000 (12:56 +0200)
committerTimm Bäder <mail@baedert.org>
Wed, 24 Apr 2019 11:29:45 +0000 (13:29 +0200)
Otherwise we might end up not passing the new value to the GPU.

gsk/gl/gskglrenderer.c
gsk/gl/gskglrenderops.c
gsk/gl/gskglrenderopsprivate.h

index 1dafe4521e8356640a5a35f56126f4d10f28e0a6..1ee037feb7513ea78bced919f497344b3b36af73 100644 (file)
@@ -2927,11 +2927,11 @@ gsk_gl_renderer_do_render (GskRenderer           *renderer,
   gsk_gl_glyph_cache_begin_frame (&self->glyph_cache);
   gsk_gl_shadow_cache_begin_frame (&self->shadow_cache, self->gl_driver);
 
-  memset (&render_op_builder, 0, sizeof (render_op_builder));
+  /* TODO: REALLY USE ONE BUILDER FOREVER! shader state is not per-frame... */
+  ops_init (&render_op_builder);
   render_op_builder.renderer = self;
   render_op_builder.current_projection = projection;
   render_op_builder.current_viewport = *viewport;
-  render_op_builder.current_opacity = 1.0f;
   render_op_builder.render_ops = self->render_ops;
   ops_set_modelview (&render_op_builder, &modelview,
                      scale_factor == 1 ? GSK_TRANSFORM_CATEGORY_IDENTITY : GSK_TRANSFORM_CATEGORY_2D_AFFINE);
index beb94a596749cbca20e486b7cee23277a1dc6272..f4c887fa5930cbb66d90e6fd5851c2f35113d2ff 100644 (file)
@@ -149,6 +149,22 @@ ops_transform_bounds_modelview (const RenderOpBuilder *builder,
   dst->origin.y += builder->dy * head->metadata.scale_y;
 }
 
+void
+ops_init (RenderOpBuilder *builder)
+{
+  int i;
+
+  memset (builder, 0, sizeof (*builder));
+
+  builder->current_opacity = 1.0f;
+
+  for (i = 0; i < GL_N_PROGRAMS; i ++)
+    {
+      builder->program_state[i].opacity = 1.0f;
+    }
+
+}
+
 void
 ops_set_program (RenderOpBuilder *builder,
                  const Program   *program)
index f54440aa308a3ca5d761f77e3fb1f878f93e8b66..a2608b7450d12174383721a806cdc7e0e42ceab9 100644 (file)
@@ -277,7 +277,7 @@ void              ops_dump_framebuffer   (RenderOpBuilder         *builder,
                                           const char              *filename,
                                           int                      width,
                                           int                      height);
-
+void              ops_init               (RenderOpBuilder         *builder);
 void              ops_finish             (RenderOpBuilder         *builder);
 void              ops_push_modelview     (RenderOpBuilder         *builder,
                                           const graphene_matrix_t *mv,